namespace System.Xml.Serialization
{
    using Internal;

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlAttributeRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlAttributeRuntimeSerializerAttribute()
            : base(AttributeRuntimeSerializer.Instance)
        {
        }

        public XmlAttributeRuntimeSerializerAttribute(string attributeName)
            : base(new AttributeRuntimeSerializer(attributeName))
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlElementRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlElementRuntimeSerializerAttribute()
            : base(ElementRuntimeSerializer.Instance)
        {
        }

        public XmlElementRuntimeSerializerAttribute(string attributeName)
            : base(new ElementRuntimeSerializer(attributeName))
        {
        }

        public XmlElementRuntimeSerializerAttribute(string attributeName, Type type)
            : base(new ElementRuntimeSerializer(attributeName, type))
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlBooleanRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlBooleanRuntimeSerializerAttribute()
            : base(BooleanRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlByteRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlByteRuntimeSerializerAttribute()
            : base(ByteRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlSByteRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlSByteRuntimeSerializerAttribute()
            : base(SByteRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlUInt16RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlUInt16RuntimeSerializerAttribute()
            : base(UInt16RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlUInt32RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlUInt32RuntimeSerializerAttribute()
            : base(UInt32RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlUInt64RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlUInt64RuntimeSerializerAttribute()
            : base(UInt64RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlInt16RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlInt16RuntimeSerializerAttribute()
            : base(Int16RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlInt32RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlInt32RuntimeSerializerAttribute()
            : base(Int32RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlInt64RuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlInt64RuntimeSerializerAttribute()
            : base(Int64RuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlDoubleRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlDoubleRuntimeSerializerAttribute()
            : base(DoubleRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlFloatRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlFloatRuntimeSerializerAttribute()
            : base(FloatRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlDecimalRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlDecimalRuntimeSerializerAttribute()
            : base(DecimalRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlStringRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlStringRuntimeSerializerAttribute()
            : base(StringRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlGuidRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlGuidRuntimeSerializerAttribute()
            : base(GuidRuntimeSerializer.Instance)
        {
        }
    }

    [AttributeUsage(AttributeTargets.Property, AllowMultiple = false)]
    public sealed class XmlEnumRuntimeSerializerAttribute : XmlRuntimeSerializerAttribute
    {
        public XmlEnumRuntimeSerializerAttribute(Type type)
            : base(type)
        {
        }
    }
}
